class QuickFind{
    constructor(n){
        /*刚开始每个人带带着自己独一无二的令牌  */
        this.fa = new Array(n+1).map((v,i)=> i)
        this.size = n
    }

    find(i){
     
        return this.fa[i]
    }

    merge(i, j){
        if(this.fa[i] === this.fa[j]){ return }
        for(let n = 1;n < this.size; n++){
            /* 因为 i 和 j 要合成一个门派， 所以让 j那一群人都佩戴 和i一样的令牌 */
            if(this.fa[n] === this.fa[i]){
                this.fa[n] = this.fa[j]
            }
        }
    }

}

class QuickUnion{
    constructor(){
        this.fa = new Array(n+1).map((v,i)=> i) // 每个人都是自己的掌门
        this.size = new Array(n+1),fill(1) // 每个门派初始人数1
        
    }

    find(i){
        /* 找管事的 找师傅有点。。。 */
        if(this.fa[i] === i) { return i}
        while(this.fa[i] !== i){
            i = this.fa[i] ;
        }
        return i
    }
    merge(i,j){
        /*快速合并直接让 j的门主 拜入i的门主的门下   */
        if(this.fa[i] === this.fa[j]){ return }
        this.fa[this.fa[j]] = this.fa[i]
        
    }
}

 